

/*单链表（含头结点）*/
#include<stdio.h>
#include<stdlib.h>
 

typedef int ElemType;
 
typedef struct LNode{
	ElemType data;  //数据域
	struct LNode *next;  // 指针域
}LNode,*LinkList;
 
LinkList CreateHeadList(ElemType a[], int n);  //头插法建立单链表

void  	OutputList(LinkList L); 
 
void main(){
	LinkList L = NULL;
	ElemType a[] = { 1, 2, 3, 4, 5 };
	ElemType e;
	L = CreateHeadList(a, 5);
  OutputList(L);
}
 
LinkList CreateHeadList(ElemType a[], int n){   //头插法建立单链表
	int i;
	LinkList L = NULL, s = NULL;
	L = (LNode*)malloc(sizeof(LNode));
	L->next = NULL;
 
	for (i = 0; i < n; i++){
		s = (LNode*)malloc(sizeof(LNode));  // 创建新节点 
		s->data = a[i];  
		s->next = L->next; // 将L的next 域指向了 新创建节点的data 域 
		L->next = s;  // 将L的next  指向为 s  
	}
	return L;
}
 

 // 输出所有链表的思路：
// 1.让头节点的next 指向下一个节点 
// 2. 做一个循环 当超出时打断循环 循环内的时候 p 指向下一个 p 是 现在的节点 p=p-> next 节点会向下一个移动
void OutputList(LinkList L){  //输出单链表全部元素
	LinkList p = L->next;
	while (p){
		printf("%d  ", p->data);
		p = p->next;
	}
	printf("\n");
}